package com.zjl.redis.第19章_IO多路复用;

/**
 *多路复用快的原因在于，操作系统提供了这样的系统调用，使得原来的while循环里多次系统调用，
 * 变成了 一次系统调用+内核层遍历 这些文件描述符。
 * epoll是现在最先进的IO多路复用器，Redis、 Nginx, linux中的Java NIO都使用的是epoll.
 * 这里“多路”指的是多个网络连接，“复用” 指的是复用同一个线程。
 * 1、一个socket的生命周期中只有一次从用户态拷贝到内核态的过程，开销小
 * 2、使用event事 件通知机制，每次socket中有数据会主动通知内核，并加入到就绪链表中，不需要遍历所有的socket
 * 在多路复用IO模型中，会有一个内核线程不断地去轮询多个socket的状态，只有当真正读写事件发送时，才真正调用实际的IO读写操作。
 * 因为在多路复用IO模型中，只需要使用一个线程就可以管理多个socket，系统不需要建立新的进程或者线程，
 * 也不必维护这些线程和进程，并且只有真正有读写事件进行时，才会使用IO资源，所以它大大减少来资源占用。
 * 多路I/O复用模型是利用select、poll、 epoll 可以同时监察多个流的I/O事件的能力，
 * 在空闲的时候，会把当前线程阻塞掉，当有一个或多个流有I/O事件时，就从阻塞态中唤醒，
 * 于是程序就会轮询一遍所有的流(epoll是只轮询那些真正发出了事件的流)，并且只依次顺序的处理就绪的流，
 * 这种做法就避免了大量的无用操作。
 * 采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络IO的时间消耗)，
 * 且Redis在内存中操作数据的速度非常快，也就是说内存内的操作不会成为影响Redis性能的瓶颈
 *
 */
public class E4_epoll {
}
